package CreationPattern.Prototype;

import java.util.Date;

/**
 * @Classname : ShallowCopySheepClient
 * @Description : 测试 浅拷贝
 * 注意：浅拷贝不会使用无参构造器，字符串和其他引用类型成员变量不会重新创建对象
 * @Author : chentianyu
 * @Date 2023/1/23 20:26
 */


public class ShallowCopySheepClient {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("测试 浅拷贝 \n");
        ShallowCopySheep sheep = new ShallowCopySheep("多莉");
        sheep.info("原型羊");

        for (int i = 1; i <= 5; i++) {
            Thread.sleep(1000);
            System.out.println();

            ShallowCopySheep copySheep = sheep.clone();
            copySheep.info("克隆羊");
            System.out.println("【原始羊0与" + "克隆羊" + i + "比较】" + sheep.compare(copySheep));
            copySheep.setName(i + "莉");
            copySheep.setCode(i);
            copySheep.setBirthday(new Date());
            copySheep.info("克隆羊调整后");
        }
    }
}

/** 20230123
 * 测试 浅拷贝
 *
 * Sheep类[有参]构造器执行
 * 【原型羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 * 【原始羊0与克隆羊1比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 相同
 * 【克隆羊调整后】这只羊叫1莉，编号为 1，生于 Mon Jan 23 23:22:36 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 * 【原始羊0与克隆羊2比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 相同
 * 【克隆羊调整后】这只羊叫2莉，编号为 2，生于 Mon Jan 23 23:22:37 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 * 【原始羊0与克隆羊3比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 相同
 * 【克隆羊调整后】这只羊叫3莉，编号为 3，生于 Mon Jan 23 23:22:38 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 * 【原始羊0与克隆羊4比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 相同
 * 【克隆羊调整后】这只羊叫4莉，编号为 4，生于 Mon Jan 23 23:22:39 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:22:35 CST 2023
 * 【原始羊0与克隆羊5比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 相同
 * 【克隆羊调整后】这只羊叫5莉，编号为 5，生于 Mon Jan 23 23:22:40 CST 2023
 */
